// 封装的 Fetch!
// 文档地址：https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API
// 使用文档：https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch

import qs from "qs";


/*
fetch(请求地址,{ 配置对象 })

fetch(url,{
    body:"请求体",
    headers:{ 请求头 },
    method:"请求方式"
}).then(async response=>{
    // response 是响应对象。要调用json方法去解析出来 返回的数据。
    let res = response.json() // 该方法返回的也是一个Promise
    console.log(res)  // 后台返回的数据，响应消息体
})

fetch(url)   // get方式去请求！

*/

//  fetch("/api/menulist").then(async response=>{
//     let res = await response.json()
//     console.log(res);
//  })

// 定义一个axios类
class Axios {
   constructor(options={}){
       this.baseURL = options.baseURL || ""
   } 
   get(url,data={},config={}){
       return new Promise((resolve,reject)=>{
           let req_url = (Object.keys(data)).length ? this.baseURL + url + `?${qs.stringify(data)}` : this.baseURL + url
           fetch(req_url,{
               ...config,
               method: "GET"
           }).then(async response=>{
                // 成功的时候做的事情
                if (response.status===200){
                    let data = await response.json();
                    resolve(data)
                }else{
                    reject(response)
                }
            })
       })
   }
    post(url, data = {}, config = {}) {
        return new Promise((resolve, reject) => {
            fetch(this.baseURL+url,{
                headers:{
                    // 'Content-Type': 'application/x-www-form-urlencoded' 
                    'content-type': 'application/json'
                },
                ...config,
                method:"POST",
                body:JSON.stringify(data) 
            }).then(async response => {
                // 成功的时候做的事情
                if (response.status === 200) {
                    let data = await response.json();
                    resolve(data)
                } else {
                    reject(response)
                }
            })
        })
    }
    all(request_arr){
        return Promise.all(request_arr)
    }
}

let axios = new Axios({
    baseURL:"/api"
});

// axios.get(请求地址,提交的数据,配置信息)
// axios.get(url,{ name:111,age:222 },{})  // Pormise
// axios.post(请求地址,提交的数据,配置信息)
// axios.all([请求对象1，请求对象2])

export default axios;
